package org.mzyyn.qr.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.mzyyn.qr.context.UserAuthContext;
import org.mzyyn.qr.dto.duitaofang.BaomingDTO;
import org.mzyyn.qr.dto.duitaofang.BaomingListDTO;
import org.mzyyn.qr.dto.duitaofang.BaomingStatusUpdateDTO;
import org.mzyyn.qr.entity.DuitaofangPO;
import org.mzyyn.qr.mapper.DuitaofangMapper;
import org.mzyyn.qr.service.DuitaofangService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.mzyyn.qr.vo.duitaofang.BaomingListVO;
import org.mzyyn.qr.vo.duitaofang.BaomingVO;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 对掏房/对战 服务实现类
 * </p>
 *
 * @author lipeng
 * @since 2024-11-21
 */
@Service
public class DuitaofangServiceImpl extends ServiceImpl<DuitaofangMapper, DuitaofangPO> implements DuitaofangService {

    public static final String LIAO_TIAN_SHI = "11425894";
    
    public static final Integer STATUS_PAIDUI = 1;
    public static final Integer STATUS_SUCCESS = 2;

    @Override
    public BaomingVO baoming(BaomingDTO baomingDTO) {
        String yanzhengma = generateYanzhengma();

        Long paiduiId = addDuitaofang(baomingDTO.getUsername(),yanzhengma);

        BaomingVO baomingVO = new BaomingVO();
        baomingVO.setUsername(baomingDTO.getUsername());
        baomingVO.setLiaotiaoshi(LIAO_TIAN_SHI);
        baomingVO.setYanzhengma(yanzhengma);
        baomingVO.setPaiduihao(StrUtil.toStringOrNull(paiduiId));

        return baomingVO;
    }

    @Override
    public List<BaomingListVO> baomingList(BaomingListDTO baomingListDTO) {
        if( !UserAuthContext.isAdmin() ){
            return new ArrayList<>();
        }
        LambdaQueryWrapper<DuitaofangPO> query = new LambdaQueryWrapper<>();
//        query.eq(DuitaofangPO::getStatus,STATUS_PAIDUI);
        if( StrUtil.isNotEmpty(baomingListDTO.getYanzhengma()) ) {
            query.eq(DuitaofangPO::getYanzhengma, baomingListDTO.getYanzhengma());
        }
        query.orderByAsc(DuitaofangPO::getStatus);
        query.orderByDesc(DuitaofangPO::getId);

        query.last(" limit 100");

        List<DuitaofangPO> list = this.list(query);
        if(CollUtil.isEmpty(list)){
            return new ArrayList<>();
        }
        return list.stream().map(v-> BeanUtil.toBean(v, BaomingListVO.class)).collect(Collectors.toList());
    }

    @Override
    public void updateSta(BaomingStatusUpdateDTO baomingStatusUpdateDTO) {
        LambdaUpdateWrapper<DuitaofangPO> update = new LambdaUpdateWrapper<>();

        update.eq(DuitaofangPO::getId,baomingStatusUpdateDTO.getId());

        update.set(DuitaofangPO::getStatus,STATUS_SUCCESS);

        this.update(update);
    }

    /**
     * 生成验证码
     * @return
     */
    public String generateYanzhengma(){
        return RandomUtil.randomStringUpper(6);
    }

    public Long addDuitaofang(String username,String yanzhengma){
        DuitaofangPO duitaofang = new DuitaofangPO();
        duitaofang.setUserUuid(UserAuthContext.getUserInfo().getUuid());
        duitaofang.setUsername(username);
        duitaofang.setLiaotiaoshi(LIAO_TIAN_SHI);
        duitaofang.setYanzhengma(yanzhengma);
        duitaofang.setPaiduihao("0");
        duitaofang.setStatus(STATUS_PAIDUI);
        duitaofang.setCreateTime(LocalDateTime.now());
        duitaofang.setUpdateTime(LocalDateTime.now());

        this.save(duitaofang);

        return duitaofang.getId();
    }
}
